我在[DAY2] 現在讓我們正式進入C#的世界吧
中補上 do while, switch case,break 與 continue 的用法。
不瞭解的朋友可以去看看
在命名變數的時候我們通常會使用有意義的名稱
例如:
int AppleCount = 10; //蘋果的數量為10
你注意到了嗎
我命名的每個片語字首都是大寫
但是在區域變數或私有變數(後面會講)開頭應該為小寫
int appleCount = 10;
而且每個片語都是有意義的
應該避免命名成難以識別的的變數
int a;
string word;
string word2;
這種用片語的字首大小寫命名的方法稱為駝峰式命名
其他有關命名規範可見
(https://dotblogs.com.tw/regionbbs/2009/09/06/codingstandards)
在大學做專題的時候
強者我朋友把按鈕的名稱命名成button1,button2...
偏偏該頁面中又有很多的button
當我想對button1加新功能
就會不小心改到另一個按鈕
搞得讓人很火大
而且在你寫程式時也許知道button1,button2是什麼
但是過個不用2個月
說不定兩周回來維護的時候你就會忘記button1指的哪一個按鈕了
方法(method) 或是稱為函式(function)指的是子區塊的程式碼
使用method能有效提升程式可用性與可讀性
將常用的程式區塊抽出,避免相同的程式重複出現
方法的宣告方法如下
public static string GetFatherName(string Name,int birthday)
//先在這行上static不然會出錯 原因之後會解釋
{
string result = Name+"的爸爸是連戰"+Name+"的生日是"+bithday;
return result;//上面宣告回傳string,若不是宣告void 則一定要return東西
}
public static void Main(string[] args){
string fatherName = GetFatherName("剩蚊",1010); //這裡Name = "剩蚊",birthay=1010
Console.WriteLine(fatherName);
}
//剩蚊的爸爸是連戰剩蚊的生日是1010
其實方法很像一個工廠
我們先定義他的產出(回傳型態)
然後告訴他你需要的原料(參數)
他就會幫你產出你需要的
public static void Test(){
Console.WriteLine("test");
}
public static void Main(string[] args){
Test();
}
//test
(這邊不懂可以先都用public 在封裝一章會講到)
存取修飾詞 | 存取範圍 |
---|---|
public | 沒有限制 |
protected | 父類別或繼承父類的子類別 |
internal | 目前專案 |
protected internal(我沒用過) | 目前專案或繼承父類的子類別 |
private(預設) | 當前類別 |
陣列跟List都是集合的概念;
宣告方法
陣列 | list |
---|---|
資料型態[] 變數名稱; | List<變數型態> 變數名稱; |
int[] numberArray = new int[5]{1,2,3,4,5}; 宣告一個大小為5的陣列 裡面有5個元素分別為1~5
list<int> numberList = new list<int>(){1,2,3}; 宣告一個整數List 裡面有3個元素分別為1~3
兩者最大的差別在於陣列一旦宣告大小之後就不能改變
另外要注意的是陣列的起點是從0開始
int[] numberArray;
numArray = new int[3];
numArray[0] = 5;
numArray[1] = 8;
numArray[2] = 11;
//numArray = [5,8,11]
上面程式碼中的new 是指實例化物件
可以想像成把跟電腦說我要記憶體來放這個東西
(明天講解類別會再提到)
public class Class1{
private void Method1(){
int b = 5;
for(int i =0;i<5;i++ ){
Console.WriteLine(i);
}
Console.WriteLine(i);//i為for迴圈的區塊變數 因此無法在for外面使用(編譯器會報錯)
}
private void Method2(){
Console.WriteLine(b);//b為Method1的區塊變數 因此無法在Method2使用(編譯器會報錯)
}
}
不要聽到演算法就覺得很難很難
事實上演算法只是解決問題的方法
這邊使用簡單的bubble sort來做排序
他的概念很簡單
當遇到前面比後面大時候 就交換2者的位置
如果後面還有未排序的資料時繼續比較
回合數 | 資料 | 說明 | i | j |
---|---|---|---|---|
排序前 | 2,5,1,3 | 無 | ||
1 | 2,5,1,3 | 2 < 5 不交換 | 0 | 0 |
2 | 2,1,5,3 | 5 > 1 交換 | 0 | 1 |
3 | 2,1,3,5 |
5 > 3 交換 (5這時候為排序完的資料) 第一輪結束 | 0 | 2 |
4 | 1,2,3,5 |
1 < 2 交換 | 1 | 0 |
5 | 1,2,3,5 |
2 < 3 不交換 (由於5以排序完 所以3不會跟5比較) 第2輪結束 | 1 | 1 |
6 | 1,2,3,5 |
1 < 2 不交換 (由於3,5以排序完 所以2不會跟3比較) 第3輪結束 | 2 | 0 |
7 | 1,2,3,5 |
無 |
using System;
namespace MyFirstProgram
{
class Program
{
public static void Main(string[] arg)
{
int[] unSortArray = new int[10]{55,12,33,5,4,44,88,65,25,40};//宣告一個未排序的陣列
int[] sortedArray = BubbleSort(unSortArray);
for (int i = 0; i < sortedArray.Length; i++)//印出陣列
{
Console.Write(sortedArray[i]+"\t");// "\t" 跟tab 差不多 Write 跟WriteLine的差別為WriteLine會換行
}
}
static int[] BubbleSort(int[] array)//宣告一個排序方法 回傳類型為整數陣列 參數也是整數陣列
{
int temp = 0;
for (int i = 0; i < array.Length; i++)
{
for (int j = 0; j < array.Length - 1 - i; j++)//比較到未排序前
{
if (array[j] > array[j + 1])//如果前者>後者
{
temp = array[j];//這3行是交換兩者位置
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
return array;
}
}
}
大功告成~~~
想不透那樣方法執行是正常的,看起來好像前後比一次而已,後續我改了方法,覺得可能對新人會比較好懂
static int[] BubbleSort(int[] array)//宣告一個排序方法 回傳類型為整數陣列 參數也是整數陣列
{
int temp = 0;
for (int i = 0; i < array.Length; i++)
{
for (int j = i+1; j < array.Length; j++)//第一個從後一位比到最後
{
if (array[i] > array[j])//如果前者>後者
{
temp = array[i];//這3行是交換兩者位置
array[i] = array[j];
array[j] = temp;
}
}
}
return array;
}
你的方法是先找出比較小的值
因為前面畫的表格跟說明是先找出最大值
所以根據前面畫的表來做演算法~~